home *** CD-ROM | disk | FTP | other *** search
/ Freelog 115 / FreelogNo115-MaiJuin2013.iso / Internet / Filezilla Server / FileZilla_Server-0_9_41.exe / source / misc / WindowsVersion.h < prev   
Text File  |  2011-11-06  |  4KB  |  136 lines

  1.  
  2. BOOL DisplaySystemVersion(LPTSTR buffer)
  3. {
  4.     OSVERSIONINFOEX osvi;
  5.     BOOL bOsVersionInfoEx;
  6.     
  7.     LPTSTR tmp=buffer;
  8.     
  9.     // Try calling GetVersionEx using the OSVERSIONINFOEX structure.
  10.     // If that fails, try using the OSVERSIONINFO structure.
  11.     
  12.     ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
  13.     osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
  14.     
  15.     bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi);
  16.     if( !bOsVersionInfoEx )
  17.     {
  18.         // If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO.
  19.         osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
  20.         if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) 
  21.             return FALSE;
  22.     }
  23.     
  24.     switch (osvi.dwPlatformId)
  25.     {
  26.         // Tests for Windows NT product family.
  27.     case VER_PLATFORM_WIN32_NT:
  28.         
  29.         // Test for the product.
  30.         
  31.         if ( osvi.dwMajorVersion <= 4 )
  32.             tmp+=_stprintf( tmp, _T("Microsoft Windows NT ") );
  33.         
  34.         if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
  35.             tmp+=_stprintf( tmp, _T("Microsoft Windows 2000 ") );
  36.         
  37.         
  38.         if( bOsVersionInfoEx )  // Use information from GetVersionEx.
  39.         { 
  40.             // Test for the workstation type.
  41.             if ( osvi.wProductType == VER_NT_WORKSTATION )
  42.             {
  43.                 if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
  44.                     tmp+=_stprintf ( tmp, _T("Microsoft Windows XP ") );
  45.                 
  46.                 if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
  47.                     tmp+=_stprintf ( tmp, _T("Home Edition ") );
  48.                 else
  49.                     tmp+=_stprintf ( tmp, _T("Professional ") );
  50.             }
  51.             
  52.             // Test for the server type.
  53.             else if ( osvi.wProductType == VER_NT_SERVER )
  54.             {
  55.                 if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
  56.                     tmp+=_stprintf ( tmp, _T("Microsoft Windows .NET ") );
  57.                 
  58.                 if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
  59.                     tmp+=_stprintf ( tmp, _T("DataCenter Server ") );
  60.                 else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
  61.                     if( osvi.dwMajorVersion == 4 )
  62.                         tmp+=_stprintf ( tmp, _T("Advanced Server ") );
  63.                     else
  64.                         tmp+=_stprintf ( tmp, _T("Enterprise Server ") );
  65.                 else if ( osvi.wSuiteMask == VER_SUITE_BLADE )
  66.                     tmp+=_stprintf ( tmp, _T("Web Server ") );
  67.                 else
  68.                     tmp+=_stprintf ( tmp, _T("Server ") );
  69.             }
  70.         }
  71.         else   // Use the registry on early versions of Windows NT.
  72.         {
  73.             HKEY hKey;
  74.             TCHAR szProductType[80];
  75.             DWORD dwBufLen=80*sizeof(TCHAR);
  76.             
  77.             RegOpenKeyEx( HKEY_LOCAL_MACHINE,
  78.                 _T("SYSTEM\\CurrentControlSet\\Control\\ProductOptions"),
  79.                 0, KEY_QUERY_VALUE, &hKey );
  80.             RegQueryValueEx( hKey, _T("ProductType"), NULL, NULL,
  81.                 (LPBYTE) szProductType, &dwBufLen);
  82.             RegCloseKey( hKey );
  83.             if ( lstrcmpi( _T("WINNT"), szProductType) == 0 )
  84.                 tmp+=_stprintf( tmp, _T("Professional ") );
  85.             if ( lstrcmpi( _T("LANMANNT"), szProductType) == 0 )
  86.                 tmp+=_stprintf( tmp, _T("Server ") );
  87.             if ( lstrcmpi( _T("SERVERNT"), szProductType) == 0 )
  88.                 tmp+=_stprintf( tmp, _T("Advanced Server ") );
  89.         }
  90.         
  91.         // Display version, service pack (if any), and build number.
  92.         
  93.         if ( osvi.dwMajorVersion <= 4 )
  94.         {
  95.             tmp+=_stprintf ( tmp, _T("version %d.%d %s (Build %d)"),
  96.                 osvi.dwMajorVersion,
  97.                 osvi.dwMinorVersion,
  98.                 osvi.szCSDVersion,
  99.                 osvi.dwBuildNumber & 0xFFFF);
  100.         }
  101.         else
  102.         { 
  103.             tmp+=_stprintf ( tmp, _T("%s (Build %d)"),
  104.                 osvi.szCSDVersion,
  105.                 osvi.dwBuildNumber & 0xFFFF);
  106.         }
  107.         break;
  108.         
  109.         // Test for the Windows 95 product family.
  110.     case VER_PLATFORM_WIN32_WINDOWS:
  111.         
  112.         if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
  113.         {
  114.             tmp+=_stprintf ( tmp, _T("Microsoft Windows 95 ") );
  115.             if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' )
  116.                 tmp+=_stprintf( tmp, _T("OSR2 ") );
  117.         } 
  118.         
  119.         if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
  120.         {
  121.             tmp+=_stprintf ( tmp, _T("Microsoft Windows 98 ") );
  122.             if ( osvi.szCSDVersion[1] == 'A' )
  123.                 tmp+=_stprintf( tmp, _T("SE ") );
  124.         } 
  125.         
  126.         if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
  127.         {
  128.             tmp+=_stprintf ( tmp, _T("Microsoft Windows Millennium Edition ") );
  129.         } 
  130.         break;
  131.     }
  132.     if (tmp==buffer)
  133.         tmp+=_stprintf( tmp, _T("%d.%d build %d"), osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber);
  134.     return TRUE; 
  135. }
  136.